]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
calendar: Rebuild the calendar when the time zone changes
authorMartin Andersson <g02maran@mail.com>
Thu, 13 Aug 2015 22:57:49 +0000 (23:57 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Wed, 4 Oct 2017 14:44:07 +0000 (16:44 +0200)
A time zone change can cause the date to change so we need to clear
SpiderMonkey's time zone cache and rebuild the calendar.

https://bugzilla.gnome.org/show_bug.cgi?id=678507

js/ui/calendar.js
js/ui/dateMenu.js

index 3db612f22357ef630fe0e3858d6f7ab72e5bc1be..efa3f44a343b790244f53783c488a1336fbd3296 100644 (file)
@@ -428,6 +428,13 @@ var Calendar = new Lang.Class({
         this.emit('selected-date-changed', new Date(this._selectedDate));
     },
 
+    updateTimeZone: function() {
+        // The calendar need to be rebuilt after a time zone update because
+        // the date might have changed.
+        this._rebuildCalendar();
+        this._update();
+    },
+
     _buildHeader: function() {
         let layout = this.actor.layout_manager;
         let offsetCols = this._useWeekdate ? 1 : 0;
index 0aad37eca5a4875d4b592562795e51a4d2e892cd..4f46a0da54643250773d3301d6bfbaa859d4eef5 100644 (file)
@@ -22,6 +22,7 @@ const PanelMenu = imports.ui.panelMenu;
 const PopupMenu = imports.ui.popupMenu;
 const Calendar = imports.ui.calendar;
 const Weather = imports.misc.weather;
+const System = imports.system;
 
 function _isToday(date) {
     let now = new Date();
@@ -545,6 +546,7 @@ var DateMenuButton = new Lang.Class({
 
         this._clock = new GnomeDesktop.WallClock();
         this._clock.bind_property('clock', this._clockDisplay, 'text', GObject.BindingFlags.SYNC_CREATE);
+        this._clock.connect('notify::timezone', Lang.bind(this, this._updateTimeZone));
 
         Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
         this._sessionUpdated();
@@ -564,6 +566,15 @@ var DateMenuButton = new Lang.Class({
         this._eventSource = eventSource;
     },
 
+    _updateTimeZone: function() {
+        // SpiderMonkey caches the time zone so we must explicitly clear it
+        // before we can update the calendar, see
+        // https://bugzilla.gnome.org/show_bug.cgi?id=678507
+        System.clearDateCaches();
+
+        this._calendar.updateTimeZone();
+    },
+
     _sessionUpdated: function() {
         let eventSource;
         let showEvents = Main.sessionMode.showCalendarEvents;